package gob.pe.inei.esvit.lib.security;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SSD {

	public static final String MD5 = "MD5";
	public static final String SHA1 = "SHA-1";
	public static final String SHA256 = "SHA-256";
	public static final String SHA384 = "SHA-384";
	public static final String SHA512 = "SHA-512";

	/***
	 * Convierte un arreglo de bytes a String usando valores hexadecimales
	 * 
	 * @param digest
	 *            arreglo de bytes a convertir
	 * @return String creado a partir de <code>digest</code>
	 */
	private static String toHexadecimal(byte[] digest) {
		String hash = "";
		for (byte aux : digest) {
			int b = aux & 0xff;
			if (Integer.toHexString(b).length() == 1)
				hash += "0";
			hash += Integer.toHexString(b);
		}
		return hash;
	}

	/***
	 * Encripta un mensaje de texto mediante algoritmo de resumen de mensaje.
	 * 
	 * @param string
	 *            Texto a encriptar
	 * @param algoritmo
	 *            Algoritmo de encriptacion, puede ser: MD2, MD5, SHA1, SHA256,
	 *            SHA384, SHA512
	 * @return Texto encriptado
	 */
	public static String encrypt(String string, String algoritmo) {
		byte[] digest = null;
		byte[] buffer = string.getBytes();
		try {
			MessageDigest messageDigest = MessageDigest.getInstance(algoritmo);
			messageDigest.reset();
			messageDigest.update(buffer);
			digest = messageDigest.digest();
		} catch (NoSuchAlgorithmException ex) {
		}
		return toHexadecimal(digest);
	}
}
